package XML;

import java.io.File;
import java.util.List;
import java.util.Scanner;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * products.xml基本信息解释如下： product为商品信息节点，discount表示是否折扣，如果是折扣商品，打七折；
 * factoryaddr是工厂地址； itemno为商品编号，name为商品名称，price为商品单价，unit是计价单位，stockcount是库存量。
 * 1：读取products.xml中的商品信息，输出。 2：查找商品信息：根据输入的商品号，输出对应的商品信息。
 * 
 * @author zhaoyang
 *
 */
public class ProductRead {

	// 将打印方法打包出来
	public static void print(Element e) {
		// 读取编号
		Element pId = (Element) e.selectSingleNode("itemno");
		// 读取名称
		Element pName = (Element) e.selectSingleNode("name");
		// 读取单价
		Element pPrice = (Element) e.selectSingleNode("price");
		// 读取单位
		Element pUnit = (Element) e.selectSingleNode("unit");
		// 读取库存
		Element pStockcount = (Element) e.selectSingleNode("stockcount");
		// 把编号包装成数字
		int idNum = Integer.parseInt(pId.getText());
		// 把单价包装成数字
		double priceNum = new Double(pPrice.getText());
		// 把库存包装成数字
		int warehouseNum = Integer.parseInt(pStockcount.getText());
		// 是否打折
		String pDiscount;
		if (e.attributeValue("discount").equals("true")) {
			pDiscount = "打七折！";
		} else {
			pDiscount = "不打折！";
		}
		// 原产地
		String pFactoryaddr = e.attributeValue("factoryaddr");
		if (pFactoryaddr == null) {
			pFactoryaddr = "未知";
		}
		System.out.println(pName.getText() + "；编号：No." + idNum + "；单价：" + priceNum + "元/" + pUnit.getText() + "；库存剩余"
				+ warehouseNum + pUnit.getText() + "；原产地：" + pFactoryaddr + "；打折信息：" + pDiscount);
	}

	public static void main(String[] args) {
		// 1：读取products.xml中的商品信息，输出。
		SAXReader reader = new SAXReader();
		Document doc = null;
		try {
			// 读取文件
			doc = reader.read(new File("/Users/zhaoyang/eclipse-workspace/JavaAdvanced_20200522/src/XML/products.xml"));
		} catch (DocumentException e) {
			System.out.println("文档出问题了");
			e.printStackTrace();
			return;
		}
		// 寻找根
		Element root = doc.getRootElement();
		System.out.println("根节点名称是：" + root.getName());
		List<Element> list = root.selectNodes("product");/// courses/course/course[coursetime>15]
		// 循环输出符合条件的内容
		for (Element e : list) {
			print(e);
		}

		System.out.println(">>>>>>>>>>>>>分割线>>>>>>>>>>>>>>");

		// 2：查找商品信息：根据输入的商品号，输出对应的商品信息。
		Scanner input = new Scanner(System.in);
		System.out.print("请输入需要查找商品编号：");
		int inputNum = input.nextInt();
		List<Element> list2 = root.selectNodes("/shop/product[itemno=" + inputNum + "]");
		System.out.println(list2.size() == 0 ? "没找到。。。" : "找到了！");
		for (Element e : list2) {
			print(e);
		}

	}

}
